一般web會因應各式處理需求而有不同的輸入,來源有常見的GET、POST、Cookie等,而該怎麼處理使用者可控的變數就是一門很深的學問。
一般會對輸入值做以下處理:
1.驗證字元編碼
2.編碼轉換處理
3.參數的格式驗證
在常見的PHP可以用mb_check_encoding進行編碼的驗證:
bool mb_check_encoding ([ string $var = NULL [, string $encoding = mb_internal_encoding() ]] )
$var是檢查對象,$encoding是字元編碼(預設是PHP自己內部的編碼),符合返回True,反之則False。
在PHP中使用mb_convert_encoding:
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
$str是轉換前字串,$to_encoding是之前的編碼,$from_encoding是要轉換的編碼,返回值string是轉換後得字串。
PHP本身在ini設定檔也有自動轉換的功能,開啟自動轉換其實省去手動檢查的麻煩,而且對於安全性也是有所提升的,其會將無法正確處理的字元編碼轉換或是刪除,但同時也是這個功能的缺點,其壞處是不會驗證變成亂碼的字串而仍然將它丟去處理
這兩三天會將關於輸入處理的背景知識先講清楚,接著再從沒有處理好輸入處理的危害開始講解攻擊手法,並適時搭配練習。